package utils

import (
	"encoding/json"
	"golang-zinx-demo/yanx/yiface"
	"io/ioutil"
)

/*
	存储一些框架的全局参数，供其他模块使用
	一些参数是可以通过yanx.json由用户进行配置
*/

type GlobalObj struct {
	/*
		Server
	*/
	TCPServer yiface.IServer // 当前Yanx全局的Server对象
	Host      string         // 当前服务器主机监听的IP
	TCPPort   int            // 当前服务器主机监听的端口号
	Name      string         // 当前服务器的名称

	/*
		Yanx
	*/
	Version        string // 当前Yanx的版本号
	MaxConn        int    // 当前服务器主机允许的最大链接数
	MaxPackageSize uint32 // 当前Yanx框架数据包的最大值
	WorkPoolSize   uint32 // 当前业务Worker池的Goroutine数量
	MaxWorkTaskLen uint32 // Yanx允许用户开辟的最大Goroutine数量
}

/*
	一个全局的对外GlobalObj对象
*/
var GlobalObject *GlobalObj

func (g *GlobalObj) Reload() {
	data, err := ioutil.ReadFile("conf/yanx.json")
	if err != nil {
		return
	}

	// 将json文件数据解析到struct中
	err = json.Unmarshal(data, &GlobalObject)
	if err != nil {
		panic(err)
	}

}

// 提供一个init方法，初始化当前的GlobalObject
func init() {
	// 如果配置文件没有加载，默认值
	GlobalObject = &GlobalObj{
		TCPServer:      nil,
		Host:           "localhost",
		TCPPort:        8999,
		Name:           "YanxServerApp",
		Version:        "V1.0",
		MaxConn:        1000,
		MaxPackageSize: 4096,
		WorkPoolSize:   10,
		MaxWorkTaskLen: 1024,
	}

	// 尝试从conf/yanx.json去加载用户自定义的参数
	GlobalObject.Reload()
}
